package com.snj.test;

import java.util.ArrayList;
import java.util.List;

public class GroupAllocation {

    public static void main(String[] args) {
        // 初始人数  
        int constructionDept = 21;
        int serviceDept = 7;

        // 分配施工部门  
        List<Integer> constructionGroups = allocateGroups(constructionDept, 13);

        // 分配服务部门  
        List<Integer> serviceGroups = allocateGroups(serviceDept, 13);

        // 处理施工部门剩余的1人  
        if (constructionGroups.size() > 1 && constructionGroups.get(constructionGroups.size() - 1) == 1) {
            int remainingPerson = 1;
            List<Integer> lastServiceGroup = serviceGroups.subList(serviceGroups.size() - 1, serviceGroups.size());
            if (!lastServiceGroup.isEmpty() && lastServiceGroup.get(0) + remainingPerson <= 13) {
                // 尝试将施工部门的剩余1人加入服务部门的最后一组  
                int newSize = lastServiceGroup.get(0) + remainingPerson;
                if (newSize > 13 || newSize % 2 == 0) {
                    // 如果加入后人数超过13或不是单数，则需要重新分配  
                    // 这里我们假设总是可以将多余的人平均分配到新组中，保持每组人数在5到13之间且为单数  
                    int extraPeople = newSize - 5; // 假设至少保持一组为5人  
                    int newGroupSize = (extraPeople / 2) * 2 + 1; // 保持为单数  
                    serviceGroups.remove(serviceGroups.size() - 1); // 移除旧的组  

                    // 添加两个新组  
                    serviceGroups.add(newGroupSize);
                    serviceGroups.add(newSize - newGroupSize);
                } else {
                    // 如果符合条件，则直接更新组大小  
                    lastServiceGroup.set(0, newSize);
                }
            }
        }

        // 打印结果  
        System.out.println("施工部门分组:");
        for (int group : constructionGroups) {
            System.out.println("一组" + group + "人");
        }

        System.out.println("服务部门分组:");
        for (int group : serviceGroups) {
            System.out.println("一组" + group + "人");
        }
    }

    // 分配组，返回每组的人数列表  
    private static List<Integer> allocateGroups(int totalPeople, int maxSize) {
        List<Integer> groups = new ArrayList<>();
        while (totalPeople > 0) {
            int groupSize = Math.min(totalPeople, maxSize);
            if (groupSize % 2 == 0 && groupSize > 1) {
                // 确保不是偶数且尽可能大（但不超过maxSize），这里简单处理为减1  
                groupSize--;
            }
            groups.add(groupSize);
            totalPeople -= groupSize;
        }
        return groups;
    }
}